package chapter05

import (
	"log"
	"time"
)

func bigSlowOperation() {
	defer trace("bigSlowOperation")() // 返回值为函数，即需要()
	time.Sleep(10 * time.Second)
}

// trace 在函数刚进去时执行输出，然后返回一个函数变量，被调用时执行退出的操作
func trace(msg string) func() {
	start := time.Now()
	log.Printf("enter %s", msg)
	return func() { log.Printf("exit %s (%s)", msg, time.Since(start)) }
}

func TraceMain() {
	bigSlowOperation()
}
